home *** CD-ROM | disk | FTP | other *** search
/ HyperLib 1997 Winter - Disc 1 / HYPERLIB-1997-Winter-CD1.ISO.7z / HYPERLIB-1997-Winter-CD1.ISO / オンラインウェア / UTIL / TouchMe 1.1.1.sit / touchMe 1.11 Folder / CW9 PP source / source / Common / LPrefsFile.cp < prev    next >
Text File  |  1996-08-08  |  4KB  |  181 lines

  1. // ==================================================
  2. //    LPrefsFile.cp
  3. //    Copyright (C) 1996 Mizutori Tetsuya, July 4 1996.
  4. // ==================================================
  5. //    All documents are pretty-printed in Geneva 10-point font.
  6.  
  7. #pragma once
  8.  
  9. #include "LPrefsFile.h"
  10.  
  11.  
  12. const    OSType    kPrefType        = 'pref';
  13. const    OSType    kPrefCreator    = 'MzTm';
  14. const    ResType    PREF_ResType    = 'PREF';
  15. const    ResIDT    PREF_ResID    = 1000;
  16.  
  17.  
  18. // --------------------------------------------------
  19. //        ・ LPrefsFile()
  20. // --------------------------------------------------
  21.  
  22. LPrefsFile::LPrefsFile()
  23. {
  24.     mPrefFileType        = kPrefType;
  25.     mPrefFileCreator    = kPrefCreator;
  26.     mPrefResType        = PREF_ResType;
  27.     mPrefResID        = PREF_ResID;
  28. }
  29.  
  30.  
  31. // --------------------------------------------------
  32. //        ・ LPrefsFile()
  33. // --------------------------------------------------
  34.  
  35. LPrefsFile::LPrefsFile( 
  36.     ConstStr255Param    inFileName )
  37.         : LPreferencesFile( inFileName, false )
  38. {
  39.     mPrefFileType        = kPrefType;
  40.     mPrefFileCreator    = kPrefCreator;
  41.     mPrefResType        = PREF_ResType;
  42.     mPrefResID        = PREF_ResID;
  43. }
  44.  
  45.  
  46. // --------------------------------------------------
  47. //        ・ ~LPrefsFile
  48. // --------------------------------------------------
  49.  
  50. LPrefsFile::~LPrefsFile()
  51. {
  52. }
  53.  
  54.  
  55. // --------------------------------------------------
  56. //        ・ SetupFileInfo
  57. // --------------------------------------------------
  58.  
  59. void
  60. LPrefsFile::SetupFileInfo(
  61.     OSType    inPrefFileType,
  62.     OSType    inPrefFileCreator )
  63. {
  64.     mPrefFileType        = inPrefFileType;
  65.     mPrefFileCreator    = inPrefFileCreator;
  66. }
  67.  
  68.  
  69. // --------------------------------------------------
  70. //        ・ SetupResType
  71. // --------------------------------------------------
  72.  
  73. void
  74. LPrefsFile::SetupResType(
  75.     ResType    inPrefResType,
  76.     ResIDT    inPrefResID )
  77. {
  78.     mPrefResType        = inPrefResType;
  79.     mPrefResID        = inPrefResID;
  80. }
  81.  
  82.  
  83. // --------------------------------------------------
  84. //        ・ LoadPref
  85. // --------------------------------------------------
  86.  
  87. OSErr
  88. LPrefsFile::LoadPref(
  89.     void*            outBlockDataPtr,
  90.     const Size        inByteSize )
  91. {
  92.     Handle    resH;
  93.     short        curResFile = ::CurResFile();
  94.     OSErr    err = noErr;
  95.  
  96.     short        vRefNum;
  97.     vRefNum = OpenOrCreateResourceFork( fsRdWrPerm,
  98.                 mPrefFileCreator, mPrefFileType, smSystemScript );
  99.  
  100.     ::UseResFile( vRefNum );
  101.     resH = ::Get1Resource( mPrefResType, mPrefResID );
  102.  
  103.     if ( resH != nil ) {
  104.         // read preferences data from the Prefs file
  105.         ::BlockMoveData( (Ptr) *resH, (Ptr) outBlockDataPtr, inByteSize );
  106.         ::ReleaseResource( resH );
  107.     } else {
  108.         // read default preferences from this application file, if Prefs file is empty
  109.         ::UseResFile( curResFile );
  110.         Handle    theH;
  111.         theH = ::GetResource( mPrefResType, mPrefResID );
  112.         if ( theH != nil ) {
  113.             ::BlockMoveData( (Ptr) *theH, (Ptr) outBlockDataPtr, inByteSize );
  114.             ::ReleaseResource( theH );
  115.         } else {
  116.             err = resNotFound;
  117.         }
  118.     }
  119.  
  120.     ::UseResFile( curResFile );
  121.     CloseResourceFork();
  122.  
  123.     return err;
  124. }
  125.  
  126.  
  127. // --------------------------------------------------
  128. //        ・ SavePref
  129. // --------------------------------------------------
  130.  
  131. OSErr
  132. LPrefsFile::SavePref(
  133.     const void*        inBlockDataPtr,
  134.     const Size        inByteSize )
  135. {
  136.     Handle    resH;
  137.     short        curResFile = ::CurResFile();
  138.     OSErr    err = noErr;
  139.  
  140.     short        vRefNum;
  141.     vRefNum = OpenOrCreateResourceFork( fsRdWrPerm,
  142.                 mPrefFileCreator, mPrefFileType, smSystemScript );
  143.  
  144.     ::UseResFile( vRefNum );
  145.     resH = ::Get1Resource( mPrefResType, mPrefResID );
  146.  
  147.     // remove the existing PREF resource
  148.     if ( resH != nil ) {
  149.         // if no changes, then do not touch the resource
  150.         Boolean    theSame = true;
  151.         for ( long i=0; i<inByteSize; i++ ) {
  152.             if ( ((unsigned char *) inBlockDataPtr)[i] != ((unsigned char *) *resH)[i] )
  153.                 theSame = false;
  154.         }
  155.         if ( theSame ) goto out;
  156.         ::RemoveResource( resH );
  157.         ::DisposeHandle ( resH );
  158.     }
  159.  
  160.     // create new PREF resource by the preferences PrefRec data
  161.     resH = NewHandleClear( inByteSize );
  162.     if ( resH != nil ) {
  163.         ::BlockMoveData( (Ptr) inBlockDataPtr, (Ptr) *resH, inByteSize );
  164.         ::AddResource( resH, mPrefResType, mPrefResID, "¥p" );
  165.         ::WriteResource( resH );
  166.         ::ReleaseResource( resH );
  167.     } else {
  168.         err = resNotFound;
  169.     }
  170.  
  171.   out:
  172.     ::UseResFile( curResFile );
  173.     CloseResourceFork();
  174.  
  175.     return err;
  176. }
  177.  
  178.  
  179.  
  180. // end of program
  181.